/**  
* @Title: IAuthorityManager.java
* @Package cn.net.mtons.action.interfaces
* @Description: TODO
* @author ma jinjian  
* @date 2016年1月23日 下午11:34:39
* @version V1.0  
*/ 
package cn.net.mtons.web.interfaces;

import javax.servlet.http.HttpSession;

import cn.net.mtons.model.entity.vo.MtonsVO;
import cn.net.mtons.web.interfaces.IAuthorityManager;

/**
 * @ClassName: IAuthorityManager
 * @Description:  
 * * 权限管理器
 * 一、存放用户token
 * 二、负责与权限系统进行权限的交互，包含，获取权限、更改权限
 * 三、负责系统的一级菜单、二级菜单、action级的动态判断
 * 四、每个用户session都会配置一个权限管理器，名称定义 authorityManager
 * 五、token的定义，token可以是一级菜单、二级菜单、action级的权限，
 * 	    也可以是在执行修改或删除操作时的数据的主键
 * @author ma jinjian
 * @date 2016年1月23日 下午11:34:39
 *
 */
public interface IAuthorityManager {
	
	public static final String SESSION_KEY = "authorityManager";
	
	/**
	 * 初始化操作，会为用户提供一对公私钥，一个对称密钥
	 * @Author cl
	 */
	void init();
	
	/**
	 * 添加权限令牌
	 * @Author cl
	 * @param token
	 * @return
	 */
	IAuthorityManager addToken( String token );
	
	/**
	 * 判断是否含有该token及token的合法性
	 * @Author cl
	 * @param token - token值(明文或密文)
	 * @param sign - token的签名值
	 * @return 空字符串表示 true，非空表示false,字符串内容为信息
	 */
	String hasToken( String token, String sign );
	
	/**
	 * 判断是否含有该token存在，不判断其合法性
	 * @Author cl
	 * @param token
	 * @return
	 */
	public boolean hasToken( String token );
	
	/**
	 * 验证令牌的合法性
	 * @Author cl
	 * @param token - token值(明文或密文)
	 * @param sign - token的签名值
	 * @return
	 */
	boolean verifyToken( String token, String sign );
	
	/**
	 * 解密token
	 * @Author cl
	 * @param token
	 * @return
	 */
	String decryptToken( String token );
	
	/**
	 * 生成一个令牌
	 * @Author cl
	 * @param token
	 * @return Base64格式的数据</br>
	 * 			[0] - token(明文或密文)</br>
	 * 			[1] - sign(token的签名值)</br>
	 */
	String[] generateToken( String token );
	
	void generateToken( MtonsVO mtonsVO );
	
	/**
	 * 清空token
	 * @Author cl
	 */
	void clearToken();
	
	/**
	 * 对session授权
	 * @Author cl
	 * @param session
	 */
	void authorization( HttpSession session );
}
